#ifndef LOGWIDGET_H
#define LOGWIDGET_H

#include <QWidget>
#include <QDateTime>
#include "LogFileHandler.h"
#include "LogDisplayModule.h" // 引入LogType枚举

QT_BEGIN_NAMESPACE
namespace Ui { class LogWidget; }
QT_END_NAMESPACE

/**
 * @brief 日志显示界面类，负责日志内容的UI展示
 */
class LogWidget : public QWidget {
    Q_OBJECT

public:
    /**
     * @brief 构造函数，初始化UI组件
     * @param parent 父窗口指针（用于窗口层级管理）
     */
    explicit LogWidget(QWidget *pParent = nullptr);

    /**
     * @brief 析构函数，释放UI资源
     */
    ~LogWidget();

    /**
     * @brief 向界面添加日志并可选地写入文件
     * @param sender 日志发送者插件名称
     * @param message 日志具体内容
     * @param logType 日志级别（默认为信息级别）
     * @param writeToFile 是否写入日志文件（默认为true）
     */
    void appendLog(const QString& sender, const QString& message, LogType logType = LogType::LOG_INFO, bool writeToFile = true);

    /**
     * @brief 设置日志文件存储目录（转发至文件处理器）
     * @param dir 目标目录绝对路径
     */
    void setLogDir(const QString& dir);

private:
    /**
     * @brief 将日志内容写入文件
     * @param logContent 待写入的日志内容字符串
     */
    void writeLogToFile(const QString& logContent);

    /**
     * @brief 清理过期的日志文件
     * @param daysToKeep 保留最近多少天的日志（默认7天）
     */
    void cleanExpiredLogs(int daysToKeep = 7);

    Ui::LogWidget *m_pUi;       ///< UI界面指针（以p开头的指针成员）
    QString logDir;             ///< 日志文件存储目录路径
    QDateTime lastCleanTime;    ///< 上次清理过期日志的时间
    LogFileHandler* m_pFileHandler; ///< 日志文件操作处理器指针
};

#endif // LOGWIDGET_H
